package day6.cal;

import org.junit.Test;

public class CalDemo {

	@Test
	public void test1() {
		Add add = new Add();
		add.setNum1(2);
		add.setNum2(4);
		int result = add.getResult();
		System.out.println(result);
		
		Sub sub = new Sub(3, 2);
		System.out.println(sub.getResult());
		
	}
	
	@Test
	public void test2() {
		// 声明成子类类型，new子类对象
		Add add = new Add(3, 2);
		// 如果Add子类覆盖了getResult这个方法，那么调用的就是子类覆盖的方法，
		// 如果子类没有覆盖getResult方法，那么调用就是父类的方法
		int result1 = add.getResult();
		System.out.println(result1);
		// Type mismatch: cannot convert from Sub to Add
		// add = new Sub(3, 2);
		
		// 声明成父类类型，new子类对象
		// 学生是人，加法是计算
		AbstractCal cal = new Add(3, 2);
		// 如果Add子类覆盖了getResult这个方法，那么调用的就是子类覆盖的方法，
		// 如果子类没有覆盖getResult方法，那么调用就是父类的方法
		int result2 = cal.getResult();
		System.out.println(result2);
		
		// cal声明成父类类型，既可以指向new出来的Add对象，又可以指向new出来的Sub对象
		// 继承：你继承什么你就是什么
		// 老师是人，减法是计算
		// 声明的父类变量可以指向不同的子类对象
		cal = new Sub(3, 2);
		int result3 = cal.getResult();
		System.out.println(result3);// 1
		
		// Cal cal;可以指向不同的子类对象，当调用cal.getResult()方法时候，会根据指向不同
		// 的对象调用不同对象下面的方法
	}
	
	
	@Test
	public void test333() {
		// 抽象类不能实例化
		// Cal cal = new Cal();
	}
	
}
